#!/usr/bin/python
#-*-coding: utf-8 -*-

u"""
:name: empty
:author: ANONYMOUS
:license: UNKNOWN
"""
__all__ = [u'HandlerPart']

########## DO NOT CHANGE THESE LINES ###########################################
import sys
from pylot.core import (ENCODING, Path)
try : __file__
except NameError : co = sys._getframe(0).f_code ; __file__ = co.co_filename
ufile = __file__.decode(ENCODING)
if ufile.strip() : PLUGIN_PATH = Path(ufile).abspath().parent
else : PLUGIN_PATH = Path(u'.').abspath()
########## DO NOT CHANGE THESE LINES ###########################################

from pylot.core import (check_type, ENCODING, Path, hardbook, Utils)
from pylot.interfaces import (HandlerInterface)
from os.path import isdir, isfile
import os
import shutil
###################################################
class HandlerPart (HandlerInterface):
  def __init__ (self, plugin_path=None, plugin_id=None):
    if plugin_path is None : plugin_path = PLUGIN_PATH
    HandlerInterface.__init__(self, plugin_path, plugin_id)
    self.addOptions(u'conf.csv', main=True)
    self.pathbook = self.opt[u'pathbook'] 
    srcdir=hardbook[u'pylotsrc']
    self.examplesDirs = [hardbook[u'examples'].value ]
    self.exampleNames=[u'example', u'examples', u'exemple', u'exemples']
    self.knownInvalidDirectories=[u'.svn', u'src', u'python', u'pylot', u'test', u'doc', u'tex']
    self.examples={}
    self.exampleName=u"No_name"
    for D in self.examplesDirs: 
      self.examples[D]=[]
      self._goThrough(D,self.examples[D])
  def _goThrough(self,D,dirlist):
    u"""
    Création liste de liste de répertoires, dans self.examples.
    Chaque item de la liste correspond à un répertoire nommé 'examples'
    Chaque terme de cet item est la liste des répertoires de l'item
    La longueur (len) de self.examples est égal au nombre de répertoires nommés 'Examples'
    Parcours récursivement les répertoires.
    @param D: le répertoire de base
    @type D: Path
    @return: None
    
    """
    
    dirs = []
    pathD=Path(D)
    for d in pathD.dirs() :
      if d.name not in self.knownInvalidDirectories :
        dirs.append(d)
    if len(dirs) == 0:
      return
    elif pathD.name.lower() in [u'example', u'examples', u'exemple', u'exemples'] :
      dirlist.append(dirs)
      return
    else:
      for d in dirs :
        self._goThrough(d.abspath(),dirlist)
  # ============================================================================
  def newProject(self, model=None, name=u"NoName"):
    u"""
    Create new pyLot project from model

    Update pathbook entries ['project','scripts','build', 'run', 'projectconf', 'builds']

    :param model: le modèle/template/exemple à recopier
    :type model: str or :class:`~pylot.tools.Path`
    :param name: le nom du répertoire projet
    :type name: str

    :return: project directory path (type :class:`~pylot.tools.Path`)
    """
    p = self.pathbook
    if not model:
      os.mkdir(p(u'project'))
    else:
      try :
        shutil.copytree(model, p(u'project'))
      except IOError:
        return 1
      if isdir(p(u'project', u".svn"))     : shutil.rmtree(p(u'project', u".svn"))
      if isdir(p(u'project', u"src/.svn")) : shutil.rmtree(p(u'project', u"src/.svn"))
    return p(u'project')
  # ============================================================================
if __name__ == '__main__':
  u"""
  Example of script
  """
  handler = HandlerPart()
  handler.init()
  handler.openProject(".")
